/**
 * 该js库用于实现与后台的实时通讯，获取报警相关的实时数据。
 * @note：注意该库需要jquery库的支持
 * User: bcw
 * Date: 13-11-30
 * Time: 下午4:18
 * To change this template use File | Settings | File Templates.
 */

var AlarmController = {
    init : function(url) {
        var self = this;
        this._url = url;
        this.webSocket = new WebSocket(url);
        this.webSocket.onmessage = function(event) {
            console.log(event);
            if (event.data) {
                try {
                    var message = $.parseJSON(event.data);
                    var fun = self[message.type];
                    if (typeof(fun) == 'function') {// 回调函数已经注册
                        fun(message.data);
                    }
                } catch (e) {
                    console.log(e);
                }
            }
        };

        this.webSocket.onerror = function(event) {
            //console.log(event);
            console.log("通讯出错");
        };

        this.webSocket.onclose = function(event) {
            //console.log(event);
            console.log("与服务器断开连接");
            setTimeout(function(){
                self.init(self._url);
            }, 2000);// 2秒后重连
        }

        this.webSocket.onopen = function(event) {
            console.log("已与服务器建立连接");
            //console.log(event);
        };
        return this;
    },

    send: function(message) {
        this.webSocket.send(message);
    },
    /**
     * 当收到新的报警时触发callback
     * @param callback 回调函数，函数执行时会将报警记录对象传递进来，报警记录对象的格式待定
     * TODO: 报警格式对象
     */
    onNewAlarm : function(callback) {
        this.newAlarm = callback;
        return this;
    },

    /**
     * 当报警内容发生改变时触发，如某报警状态生动恢复，或自动变为已处理状态
     * @param callback 回调函数，待传递的参数和格式未确定
     * TODO：
     */
    onAlarmChange : function(callback) {
        this.alarmChange = callback;
        return this;
    }
};

